#pragma once

using namespace System;
using namespace Extensibility;
using namespace EnvDTE;
using namespace EnvDTE80;
using namespace Microsoft::VisualStudio::CommandBars;
using namespace System::Resources;
using namespace System::Reflection;
using namespace System::Globalization;
using namespace System::Windows::Forms;

namespace Serika
{
	public ref class GenClassCode : public IDTExtensibility2, public IDTCommandTarget
	{
	public:
		GenClassCode()
		{
		}

		virtual void OnAddInsUpdate(System::Array ^%custom);
		virtual void OnBeginShutdown(System::Array ^%custom);
		virtual void OnConnection(System::Object ^Application, ext_ConnectMode ConnectMode, System::Object ^AddInInst, System::Array ^%custom);
		virtual void OnStartupComplete(System::Array ^%custom);
		virtual void OnDisconnection(ext_DisconnectMode removeMode, System::Array ^%custom);
		virtual void Exec(String ^CmdName, vsCommandExecOption ExecuteOption, Object ^%VariantIn, Object ^%VariantOut, bool %handled);
		virtual void QueryStatus(String ^CmdName, vsCommandStatusTextWanted NeededText, vsCommandStatus %StatusOption, Object ^%CommandText);

	private:
		DTE2 ^_applicationObject;
		AddIn ^_addInInstance;
		CommandBarEvents^ menuItemHandler;
		Serika::CommandManager^ mManager;
		array<String^>^ mMenus;
		String^ mCommandName;
	};
}
